/* =============================================================================
PROJET           : c-social-network
NOM DU FICHIER   : personne.h
OBJET            : Header du module personne.
--------------------------------------------------------------------------------
DATE DE CREATION : 27/04/10
AUTEUR           : Benjamin MICHEL
--------------------------------------------------------------------------------
MODIFICATIONS (   n) date - auteur - description )
    1) 27/04/10 - Benjamin MICHEL - création de la structure, et des fonctions
    2) 28/04/10 - Benjamin MICHEL - rajout de la fonction is_identique
    3) 28/04/10 - Benjamin MICHEL - Ajout de la fonction destroy
============================================================================= */

#define MAX_NOM_PERSONNE 20

/*structure t_personne
    id: numéro d'identité d'une personne
    nom: le nom d'une personne de taille maximale MAX_NOM_PERSONNE
    frequence: la fréquence à laquelle une personne vérifie son compte

IMPORTANT!
--require:
--  initialisation:
--      t_personne *<nom_instance> = NULL;
*/
typedef struct _personne t_personne;
struct _personne{
    int id;
    char nom[MAX_NOM_PERSONNE];
    int frequence;
};


/*
function creer_vide return t_personne*;
cree une t_personne avec aucune informations

--ensure:
--	is_vide(creer_vide()) == VRAIS
*/
t_personne* creer_vide(void);


/*
function creer(IN: int id, char[MAX_NOM_PERSONNE] nom, int frequence) return t_personne*;
cree une t_personne avec les données passées en paramètre

--ensure:
--  t_personne *pers;
--  pers=creer(id, nom, freq);
--  get_id(pers) == id;
--  get_nom(pers) == nom;
--  get_frequence(pers) == freq;
*/
t_personne* creer(int, char[MAX_NOM_PERSONNE], int);


/*
function is_vide(IN: t_personne * pers) return Boolean;
Vrais si t_personne est vide, faux sinon

--ensure:
--  is_vide(creer_vide()) == VRAIS
--  AND
--  is_vide(creer(id, nom, freq)) == FAUX
*/
int is_vide(const t_personne*);


/*
function get_id(IN: t_personne* pers) return int;
renvoie l'id de la t_personne

--require:
--  pers != NULL
*/
int get_id(const t_personne *);


/*
procedure get_nom(IN: t_personne* pers, OUT: char ** nom);
assigne le nom de la t_personne à la chaine de char donnée en paramètre

--require:
--  pers != NULL
--  nom == NULL
*/
void get_nom(const t_personne *, char **);


/*
function get_frequence(IN: t_personne * pers) return int;
renvoie la fréquence de vérification de son compte de la t_personne

--require:
--  pers != NULL
*/
int get_frequence(const t_personne *);


/*
function is_identique(IN: t_personne* pers1, t_personne* pers2) return bool;
renvoie TRUE si ce sont les mêmes, faux sinon

--ensure:
--  t_personne *pers1, *pers2;
--  ...
--  is_identique(pers1, pers2) == TRUE >> pers1 et pers2 pointent vers la même personne
*/
int is_identique(const t_personne *, const t_personne *);

/*
procedure destroy(OUT: t_personne* pers);
Détruit la pers, et libère la mémoire

--ensure:
--  pers == NULL
*/
void destroy(t_personne **);
